home *** CD-ROM | disk | FTP | other *** search
/ MacHack 2000 / MacHack 2000.toast / pc / The Hacks / Genie / Projects / Pedestal / Source / Sources / Files / PedAccess.cc next >
Encoding:
C/C++ Source or Header  |  2000-06-24  |  1.9 KB  |  130 lines

  1. /* PedAccess.cc */
  2.  
  3. #include <Errors.h>
  4. #include <Files.h>
  5. #include <Resources.h>
  6.  
  7. #include "DGDebugging.h"
  8.  
  9. #include "PedAccess.hh"
  10. #include "PedFSRef.hh"
  11.  
  12. PedAccess::PedAccess(AccessPath inAccess)
  13. : mAccess(inAccess), mPrivate(false)
  14. {
  15.     
  16. }
  17.  
  18. PedAccess::~PedAccess()
  19. {
  20.     
  21. }
  22.  
  23. //================================================
  24.  
  25. PedAccessRaw::PedAccessRaw(AccessPath inAccess)
  26. : PedAccess(inAccess)
  27. {
  28.     
  29. }
  30.  
  31. PedAccessRaw::~PedAccessRaw()
  32. {
  33.     if (mPrivate && mAccess != NULL) {
  34.         Close();
  35.     }
  36. }
  37.  
  38. void
  39. PedAccessRaw::Close()
  40. {
  41.     if (!mAccess) {
  42.         return;
  43.     }
  44.     
  45.     OSErr err = ::FSClose(mAccess);
  46.     ThrowIfOSErr_(err);
  47.     mAccess = NULL;
  48. }
  49.  
  50. long
  51. PedAccessRaw::Read(long inCount, char *inBuf)
  52. {
  53.     OSErr err;
  54.     long actualCount = inCount;
  55.     
  56.     err = ::FSRead(mAccess, &actualCount, inBuf);
  57.     if (err != noErr && err != eofErr) {
  58.         ThrowOSErr_(err);
  59.     }
  60.     return actualCount;
  61. }
  62.  
  63.  
  64. //================================================
  65.  
  66. PedAccessData::PedAccessData(AccessPath inAccess)
  67. : PedAccessRaw(inAccess)
  68. {
  69.     
  70. }
  71.  
  72. PedAccessData::PedAccessData(const PedFSRef &inFSRef, AccessPerm inPerm)
  73. : PedAccessRaw(NULL)
  74. {
  75.     mAccess = inFSRef.OpenData(inPerm);
  76.     mPrivate = true;
  77. }
  78.  
  79. PedAccessData::~PedAccessData()
  80. {
  81. }
  82.  
  83. //================================================
  84.  
  85. PedAccessRF::PedAccessRF(const PedFSRef &inFSRef, AccessPerm inPerm)
  86. : PedAccessRaw(NULL)
  87. {
  88.     mAccess = inFSRef.OpenRF(inPerm);
  89.     mPrivate = true;
  90. }
  91.  
  92. PedAccessRF::~PedAccessRF()
  93. {
  94. }
  95.  
  96. //================================================
  97.  
  98. PedAccessRes::PedAccessRes(AccessPath inAccess)
  99. : PedAccess(inAccess)
  100. {
  101.     
  102. }
  103.  
  104. PedAccessRes::PedAccessRes(const PedFSRef &inFSRef, AccessPerm inPerm)
  105. : PedAccess(NULL)
  106. {
  107.     mAccess = inFSRef.OpenResFile(inPerm);
  108.     mPrivate = true;
  109. }
  110.  
  111. PedAccessRes::~PedAccessRes()
  112. {
  113.     if (mPrivate && mAccess != NULL) {
  114.         Close();
  115.     }
  116. }
  117.  
  118. void
  119. PedAccessRes::Close()
  120. {
  121.     if (!mAccess) {
  122.         return;
  123.     }
  124.     
  125.     ::CloseResFile(mAccess);
  126.     OSErr err = ResError();
  127.     ThrowIfOSErr_(err);
  128.     mAccess = NULL;
  129. }
  130.